#ifndef __CPU_H__

#define __CPU_H__

#include "libs/types.h"

#define NR_CPUS 8


#define apic 0 << 0;
#define x2apic 1 << 0;

#define MAX_CPU 256


struct CpuFunction
{
    unsigned char apicSupport : 1;
    unsigned char x2apicSupport : 1;

}__attribute__((packed));





class Cpu
{
private:
    /* data */

public:

    
    Cpu(/* args */);
    ~Cpu();
};


    


class cpumanager
{
private:
    /* data */
   
public:
    uint8_t smtIdWidth;
    uint8_t coreIdWidth;
    uint8_t packetWidth;
    CpuFunction cpufunction;
    Cpu* cpus[MAX_CPU];
    uint64_t numOfCpus;
    static cpumanager* cpum;
    cpumanager(/* args */);
    ~cpumanager();
};

#define CPUMANAGER \
cpumanager::cpum

#endif